package com.wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 使用spark进行wordcount
 */
object WordCount {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf()
    conf.setMaster("local").setAppName("scala_word_count")

    val sc=new SparkContext(conf)
    //zhangsan lisi
    val liens:RDD[String]=sc.textFile("./words.txt")
    //将文件的数据按照行读取，flatMap 进行空格的split分割返回一行的多个单词
    var words:RDD[String]=liens.flatMap(line=>{
      line.split(" ")
    })
    //给每个单词添加尾标二元祖 如("zhangsan",1)
   val paireWord:RDD[(String,Int)]= words.map(word=>{
      new Tuple2(word,1)
    })
    //根据key来进行计数  zhangsan 1逢 zhangsan 进行尾标相加
    val result:RDD[(String,Int)]=paireWord.reduceByKey((a:Int,b:Int)=>{
      a+b  //计总数
    })
    println("降序排列，以第二位数")
    result.sortBy(tuple=>{ tuple._2},false).foreach(r=>{
      println(r)
    })
    println("升序排列，以第二位数")
    result.sortBy(tuple=>{ tuple._2}).foreach(r=>{
      println(r)
    })


    //关闭资源
    sc.stop()
  }
}
